package facilius.controller.action.frequencia;

import facilius.model.ServiceLocator;
import facilius.model.pojo.Frequencia;
import facilius.model.pojo.UsuarioCursoTurma;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.mentawai.core.BaseAction;

/**
 *
 * @author Graciano
 */
public class FrequenciaReadAction extends BaseAction {

    @Override
    public String execute() throws Exception {
        String consequence = ERROR;
        try {
            Long aulaId = input.getLong("id");

            Long freqId = input.getLong("freqId");
            String status = input.getString("status");

            Map<String, Object> criteria = new HashMap<String, Object>();
            criteria.put("aulaId", aulaId);
            List<UsuarioCursoTurma> usuarios = ServiceLocator.getUsuarioCursoTurmaService().readByCriteria(criteria);

            List<Map<String, Object>> listMapFrequenciaUsuario = new ArrayList<Map<String, Object>>();

            for (UsuarioCursoTurma usuarioCursoTurma : usuarios) {

                Map<String, Object> criteriaFrequencia = new HashMap<String, Object>();
                criteriaFrequencia.put("aulaId", aulaId);
                criteriaFrequencia.put("matricula", usuarioCursoTurma.getUsuarioCurso().getMatricula());
                List<Frequencia> frequencia = ServiceLocator.getFrequenciaService().readByCriteria(criteriaFrequencia);

                Map<String, Object> mapFrequenciaUsuario = new HashMap<String, Object>();

                if (frequencia.isEmpty()) {
                    mapFrequenciaUsuario.put("frequencia", "Inexistente");
                    if (usuarioCursoTurma.getId().equals(freqId)){
                        if (status.equalsIgnoreCase("Inexistente")){
                            Frequencia f = new Frequencia();
                            f.setAula(ServiceLocator.getAulaService().readById(aulaId));
                            f.setStatus(true);
                            f.setUsuarioCurso(usuarioCursoTurma.getUsuarioCurso());
                            ServiceLocator.getFrequenciaService().create(f);
                            frequencia.add(0, f);
                            mapFrequenciaUsuario.put("frequencia", (frequencia.get(0).isStatus())? "Presente" : "Ausente");
                        }
                    }
                } else {
                    if (usuarioCursoTurma.getId().equals(freqId)){
                        if (status.equalsIgnoreCase("presente")){
                            frequencia.get(0).setStatus(false);
                        }else{
                            frequencia.get(0).setStatus(true);
                        }
                        ServiceLocator.getFrequenciaService().update(frequencia.get(0));
                    }
                    mapFrequenciaUsuario.put("frequencia", (frequencia.get(0).isStatus())? "Presente" : "Ausente");
                }
                mapFrequenciaUsuario.put("usuario", usuarioCursoTurma);
                mapFrequenciaUsuario.put("aulaId", aulaId);
                listMapFrequenciaUsuario.add(mapFrequenciaUsuario);

            }

            output.setValue("pojos", listMapFrequenciaUsuario);

            consequence = SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
        }

        return consequence;
    }
}
